import socket
import json
from datetime import datetime
import time  # 导入time模块用于延迟

def write_server_variable(var_name, var_value):
    """
    向服务端写入指定变量
    :param var_name: 变量名，必须是 "skill_type"、"terminate_status"、"mouse_status" 之一
    :param var_value: 变量值，需符合服务端要求（skill_type:A/S; terminate_status:Y/N; mouse_status:U/D）
    """
    server_ip = '127.0.0.1'
    server_port = 18787

    try:
        # 创建TCP socket并连接服务器
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
            s.connect((server_ip, server_port))
            print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]}] 已连接服务器 {server_ip}:{server_port}")

            # 构建WRITE模式的JSON指令，严格匹配服务端协议
            request_data = {
                "mode": "WRITE",
                "variable": var_name,
                "value": var_value
            }
            # 将字典转为JSON字符串并编码
            request_json = json.dumps(request_data)
            s.sendall(request_json.encode('utf-8'))
            print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]}] 已发送写入请求: {request_json}")

            # 接收服务端响应（1024字节缓冲区，与服务端匹配）
            response = s.recv(1024)
            if response:
                response_str = response.decode('GBK')  # 服务端无GBK编码，此处用utf-8更匹配
                # 解析JSON响应，提升可读性
                response_json = json.loads(response_str)
                print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]}] 服务端响应:")
                print(f"  状态: {response_json['status']}")
                print(f"  消息: {response_json['message']}")
                print(f"  当前技能类型: {response_json['skill_type']} (A=AOE/S=单体)")
                print(f"  当前终止状态: {response_json['terminate_status']} (Y=已终止/N=运行中)")
                print(f"  当前鼠标状态: {response_json['mouse_status']} (D=按下/U=抬起)")
            else:
                print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]}] 未收到服务端响应")

        print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]}] 连接已断开\n")

    except ConnectionRefusedError:
        print(f"无法连接到服务器 {server_ip}:{server_port}，请先启动C++服务端")
    except json.JSONDecodeError:
        print("服务端返回数据格式错误，无法解析为JSON")
    except Exception as e:
        print(f"发生错误: {str(e)}")

# 测试：修改技能类型为AOE（A），可根据需要修改变量名和值
if __name__ == "__main__":
    # 可选修改方案：
    # 1. 修改终止状态为已终止：write_server_variable("terminate_status", "Y")
    # 2. 修改鼠标状态为按下：write_server_variable("mouse_status", "D")


    for i in range(1, 1000):
        # # 获取当前系统时间
        # current_time = datetime.now()
        # # 提取秒数并获取个位数
        # second_digit = current_time.second % 10
        # # 当秒的个位数是偶数时才调用函数
        # if second_digit % 2 == 0:
        #     write_server_variable("heartbeat_color", "R")
        time.sleep(1)
        write_server_variable("heartbeat_color", "R")
